// DataLibrary InterfacePlugin - Config

// 識別子：DL_CFG
// 内容  ：コンフィグ。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
DL_LoadInterface_Config:
	// 共有サブルーチンを読み込む
	Call DL_LoadInterface "Common"
	
	// サブインターフェースを読み込む
	Call DL_LoadInterface "Config"
	Call DL_LoadInterface "Help"
	
	// スキンを読み込む
	Call DL_LoadSkin "Config"
Return


//-- プラグインの終了処理 --//
DL_UnLoadInterface_Config:
	UnSet DL_CFG_ConfigData
Return


//----------------------------------------------------------------------------//
// Interface-Config
//----------------------------------------------------------------------------//

//-- GUI_Config : インターフェースを開始する --//
DL_GUI_Config:
	// 並び順を変更する
	Sort DL_CFG_ConfigData
	
	// インターフェースを表示する
	Call DL_CFG_SkinAction "StartInterface"
	Show
	Do
		Call DL_CMN_WaitAction
	Loop While DL_CFG_InterfaceAction(DL_CMN_ActionID)
	
	// インターフェースを終了する
	Call DL_CFG_SkinAction "EndInterface"
Return


//-- InterfaceAction action_id : 動作を実行する。ループ続行なら1を返す --//
DL_CFG_InterfaceAction:
	Local action_id = Args(1)
	Switch LIndex(action_id, 1)
	Case "ConfigData"
		Call DL_PlaySound_Click
		Call DL_CFG_SkinAction "SelectConfigData" action_id
		
		Local data = DL_CFG_ConfigData[LIndex(action_id, 2)]
		Local id = LIndex(data, 2)
		Local mode = LIndex(data, 3)
		Local value = DL_GetConfigValue(id, LIndex(data, 4))
		
		// モードに合わせた処理を行う
		Switch LIndex(mode, 1)
		Case "OnOff"
			value = (value = 0)
		Case "InputNum"
			Local text = "数値を入力して下さい。;入力可能な範囲　[ " & LIndex(mode, 2) & "〜" & LIndex(mode, 3) & " ]"
			Input value DL_ReplaceCRLF(DL_CFG_GetInputDefinedText(text, mode)) value
			If value != "" Then
				value = Min(Max(value, LIndex(mode, 2)), LIndex(mode, 3))
			EndIf
		EndSw
		
		// 値が未設定の場合はキャンセルする
		If value = "" Then
			Call DL_CFG_SkinAction "CancelConfigData" action_id
			Return 1
		EndIf
		
		// 値に合わせてフラグを設定する
		If value = LIndex(data, 4) Then
			Call DL_UnSetConfig id  // 初期値と同じならフラグを削除する
		Else
			Call DL_SetConfig id value
		EndIf
		
		// サブルーチンが指定されていた場合は呼び出す
		If LIndex(data, 7) != "" Then
			Call LIndex(data, 7)
		EndIf
		
		// 画面を再描画する
		Call DL_CFG_SkinAction "RedrawConfigData" action_id
		Return 1
	Case "Scroll"
		// スクロール用の汎用処理を呼び出す
		Return DL_CMN_ScrollAction(action_id, "CFG")
	Case "Return" "Cancel"
		// 戻る用の汎用処理を呼び出す
		Return DL_CMN_ReturnAction(action_id, "CFG", "Index")
	Case "Index"
		// 戻る用の汎用処理を呼び出す(インデックス直帰)
		Return DL_CMN_IndexAction(action_id, "CFG")
	Case "Quit"
		// 終了用の汎用処理呼び出す 
		Return DL_CMN_QuitAction(action_id, "CFG")
	Case Else
		// 未設定動作用の汎用処理を呼び出す
		Return DL_CMN_NotDefinedAction(action_id, "CFG")
	EndSw
Return 1


//----------------------------------------------------------------------------//
// Subroutine
//----------------------------------------------------------------------------//

//-- SetConfigData class_id config_id type value title text [subroutine] : コンフィグ項目を設定する --//
DL_CFG_SetConfigData:
	Set DL_CFG_ConfigData[Count(DL_CFG_ConfigData) + 1] _
		("(" & Args(1) & ") (" & Args(2) & ") (" & Args(3) _
			& ") (" & Args(4) & ") (" & Args(5) & ") (" & Args(6) & ") (" & Args(7) & ")")
Return


//-- GetInputDefined(value, mode) : 入力モードの特殊定義を返す --//
DL_CFG_GetInputDefined:
	Local value = Args(1)
	Local mode = Args(2)
	Local i
	For i = 4 To LLength(mode) Step 2
		If value = LIndex(mode, i) Then
			Return LIndex(mode, i + 1)
		EndIf
	Next
Return value


//-- GetInputDefinedText(text, mode) : 入力モードの特殊定義を返す --//
DL_CFG_GetInputDefinedText:
	Local text = Args(1) & ";;"
	Local mode = Args(2)
	Local i
	
	If LLength(mode) < 4 Then
		Return Args(1)
	EndIf
	
	For i = 4 To LLength(mode) Step 2
		text = text & "　" & LIndex(mode, i) & " = " & LIndex(mode, i + 1)
	Next
Return text


